from rest_framework import serializers
from django_redis import get_redis_connection
# ModelSerializer
# Serializer
# 因为ModelSerializer需要关联模型
class RegisterSMSCodeSerializer(serializers.Serializer):

    text = serializers.CharField(label='图片验证码',max_length=4,min_length=4)
    image_code_id = serializers.UUIDField(label='uuid')

    # 序列化器校验有四种方式
    # uuid 字段类型
    # max_length 字段选项
    # validata_filename 单个字段
    # valids 多个字段

    def validate(self, attrs):

        # 1.获取用户提交的验证码
        text = attrs.get('text')
        image_code_id = attrs.get('image_code_id')

        # 2.获取redis 的验证码
        redis_conn = get_redis_connection('code')
        redis_text = redis_conn.get('img_%s'%image_code_id)
        # 判断是否存在
        if redis_text is None:
            raise serializers.ValidationError('验证码已过期')
        # 删除
        redis_conn.delete('img_%s'%image_code_id)

        # 3. 比较
        if redis_text.decode().lower() != text.lower():
            raise serializers.ValidationError('验证码错误')

        return attrs